import { useParams } from 'common' import dayjs from 'dayjs' import { ArrowRight, RefreshCw } from 'lucide-react' import { useEffect, useRef } from 'react' import ReportFilterBar from '@/components/interfaces/Reports/ReportFilterBar' import ReportHeader from '@/components/interfaces/Reports/ReportHeader' import ReportPadding from '@/components/interfaces/Reports/ReportPadding' import { REPORT_DATERANGE_HELPER_LABELS } from '@/components/interfaces/Reports/Reports.constants' import ReportStickyNav from '@/components/interfaces/Reports/ReportStickyNav' import { SharedAPIReport } from '@/components/interfaces/Reports/SharedAPIReport/SharedAPIReport' import { useSharedAPIReport } from '@/components/interfaces/Reports/SharedAPIReport/SharedAPIReport.constants' import { DatePickerValue, LogsDatePicker, } from '@/components/interfaces/Settings/Logs/Logs.DatePickers' import UpgradePrompt from '@/components/interfaces/Settings/Logs/UpgradePrompt' import DefaultLayout from '@/components/layouts/DefaultLayout' import ObservabilityLayout from '@/components/layouts/ObservabilityLayout/ObservabilityLayout' import { ButtonTooltip } from '@/components/ui/ButtonTooltip' import { ObservabilityLink } from '@/components/ui/ObservabilityLink' import { useRefreshHandler, useReportDateRange } from '@/hooks/misc/useReportDateRange' import { useDatabaseSelectorStateSnapshot } from '@/state/database-selector' import type { NextPageWithLayout } from '@/types' const PostgRESTReport: NextPageWithLayout = () => { return ( ) } PostgRESTReport.getLayout = (page) => ( {page} ) export type UpdateDateRange = (from: string, to: string) => void export default PostgRESTReport const PostgrestReport = () => { const { db, chart } = useParams() const { selectedDateRange, datePickerValue, datePickerHelpers, showUpgradePrompt, setShowUpgradePrompt, handleDatePickerChange: handleDatePickerChangeFromHook, } = useReportDateRange(REPORT_DATERANGE_HELPER_LABELS.LAST_60_MINUTES) const { data, error, isLoading, refetch, isRefetching, filters, addFilter, removeFilters, isLoadingData, sql, } = useSharedAPIReport({ filterBy: 'postgrest', start: selectedDateRange?.period_start?.date, end: selectedDateRange?.period_end?.date, }) const state = useDatabaseSelectorStateSnapshot() const hasStateSyncedFromUrlRef = useRef(false) useEffect(() => { if (hasStateSyncedFromUrlRef.current) return hasStateSyncedFromUrlRef.current = true if (db !== undefined) { setTimeout(() => { // [Joshen] Adding a timeout here to support navigation from settings to reports // Both are rendering different instances of ProjectLayout which is where the // DatabaseSelectorContextProvider lies in (unless we reckon shifting the provider up one more level is better) state.setSelectedDatabaseId(db) }, 100) } if (chart !== undefined) { setTimeout(() => { const el = document.getElementById(chart) if (el) el.scrollIntoView({ behavior: 'smooth', block: 'center' }) }, 200) } }, [state, db, chart]) const handleDatePickerChange = (values: DatePickerValue) => { handleDatePickerChangeFromHook(values) } const onRefreshReport = useRefreshHandler( datePickerValue, datePickerHelpers, handleDatePickerChange, refetch ) return ( <>
} className="w-7" tooltip={{ content: { side: 'bottom', text: 'Refresh report' } }} onClick={onRefreshReport} /> {selectedDateRange && (

{dayjs(selectedDateRange.period_start.date).format('MMM D, h:mma')}

{dayjs(selectedDateRange.period_end.date).format('MMM D, h:mma')}

)}
} >
) }